iT邦幫忙

2023 iThome 鐵人賽

DAY 10
1
SideProject30

DDOS:閑的沒事就開始DDOS系列 第 10

[Day 10] 閑的沒事就寫benchmark

  • 分享至 

  • xImage
  •  

什麼是benchmark

基準測試(benchmark)是一種程式碼的測試方法,在特定時間或特定操作下或功能在一定條件下的測試速度,通常以次數與時間做基本。

Benchmark

package main

import (
	"runtime"
	"testing"

	"github.com/windasunny/ddos/packet"
)

// Benchmark for the first udp code (using gopacket)
func BenchmarkGopacket(b *testing.B) {
	b.ReportAllocs()

	for i := 0; i < b.N; i++ {
		packet.Udp()
	}

	var memStats runtime.MemStats
	runtime.ReadMemStats(&memStats)
}

// Benchmark for the second udp code (using unix)
func BenchmarkUnixUDP(b *testing.B) {
	b.ReportAllocs()

	for i := 0; i < b.N; i++ {
		packet.SysUdp()
	}

	var memStats runtime.MemStats
	runtime.ReadMemStats(&memStats)
}

輸出

# functest                 Number of iterations    Runtime/Iteration    Memory/Iteration    Memory allocations/Iteration
BenchmarkGopacket-8         7158                   167018 ns/op           28496 B/op        279 allocs/op
BenchmarkUnixUDP-8         15555                   150377 ns/op              96 B/op          4 allocs/op
PASS

結論

unix-udp顯然比gopacket-udp內存消耗更低、執行時間更快。接下來封包都會用unix建立封包。


上一篇
[Day 9] 閑的沒事就寫封包 - gopacket建立UDP封包
下一篇
[Day 11] 閑的沒事就寫封包 - SYN Flood之建立封包
系列文
DDOS:閑的沒事就開始DDOS31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言